package com.huaweiyuntest.springbootdemo.controller;//
//package com.trade.testspringboot.controller;
// // 使用iText
//import com.itextpdf.io.font.PdfEncodings;
//import com.itextpdf.kernel.colors.Color;
//import com.itextpdf.kernel.colors.DeviceRgb;
//import com.itextpdf.kernel.font.PdfFont;
//import com.itextpdf.kernel.font.PdfFontFactory;
//import com.itextpdf.kernel.geom.PageSize;
//import com.itextpdf.kernel.geom.Rectangle;
//import com.itextpdf.kernel.pdf.PdfDocument;
//import com.itextpdf.kernel.pdf.PdfPage;
//import com.itextpdf.kernel.pdf.PdfReader;
//import com.itextpdf.kernel.pdf.PdfWriter;
//import com.itextpdf.layout.Document;
//import com.itextpdf.layout.borders.SolidBorder;
//import com.itextpdf.layout.element.Cell;
//import com.itextpdf.layout.element.Paragraph;
//import com.itextpdf.layout.element.Table;
//import com.itextpdf.layout.properties.TextAlignment;
//import com.itextpdf.layout.properties.UnitValue;
//import com.itextpdf.layout.properties.VerticalAlignment;
//
//import java.io.File;
//import java.io.IOException;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//
//public class pdfTest2 {
//    private static final String CHINESE_FONT_PATH = "/Users/mac/yangxulong/CE/tmp/pdf-generator/AlibabaPuHuiTi-3-55-Regular.ttf";
//    private static final String CHINESE_FONT_BORDER_PATH = "/Users/mac/yangxulong/CE/tmp/pdf-generator/AlibabaPuHuiTi-3-85-Bold.ttf";
//    private static final String TEMPLATE_PATH = "/Users/mac/yangxulong/CE/tmp/pdf_template-2.pdf";
//    private static final String OUTPUT_PATH = "/Users/mac/yangxulong/CE/tmp/result_final.pdf";
//
//    private static final float[] COLUMN_WIDTHS = {
//            7, 6, 7, 6, 7, 6, 7, 8, 10, 8, 6, 9, 7, 8, 7
//    };
//
//    private static final String[] TABLE_HEADERS = {
//            "订单编号", "状态", "业务场景", "通道类型", "资源编号",
//            "成交数量", "成交单价", "成交总额", "成交时间", "产品名称",
//            "交割地", "客户名称", "业务单位", "签约甲方", "二级单位"
//    };
//    public static void generatePdf(List<OrderDetail> orderList, String title, String businessUnit) throws IOException {
//        PdfReader reader = new PdfReader(TEMPLATE_PATH);
//        PdfWriter writer = new PdfWriter(OUTPUT_PATH);
//        PdfDocument pdfDoc = new PdfDocument(reader, writer);
//
//        PdfPage firstPage = pdfDoc.getFirstPage();
//        int rotation = firstPage.getRotation();
//        Rectangle pageSize = firstPage.getPageSizeWithRotation();
//
//        Document document = new Document(pdfDoc, new PageSize(pageSize));
//        document.setMargins(90, 10, 50, 10);
//
//        PdfFont normalFont = PdfFontFactory.createFont(CHINESE_FONT_PATH, PdfEncodings.IDENTITY_H);
//        PdfFont boldFont = PdfFontFactory.createFont(CHINESE_FONT_BORDER_PATH, PdfEncodings.IDENTITY_H);
//
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//
//        // 添加标题
//        Paragraph titlePara = new Paragraph(title)
//                .setFont(boldFont)
//                .setFontSize(18)
//                .setFontColor(new DeviceRgb(0, 0, 0))
//                .setTextAlignment(TextAlignment.CENTER)
//                .setMarginBottom(30);
//        document.add(titlePara);
//
//        // 添加业务单位
//        Paragraph businessUnitPara = new Paragraph()
//                .add(new com.itextpdf.layout.element.Text("业务单位:").setFont(boldFont).setFontSize(14))
//                .add(new com.itextpdf.layout.element.Text(businessUnit).setFont(normalFont).setFontSize(11))
//                .setTextAlignment(TextAlignment.LEFT)
//                .setMarginBottom(25);
//        document.add(businessUnitPara);
//
//        // 创建表格并添加表头
//        Table table = new Table(COLUMN_WIDTHS);
//        table.setWidth(UnitValue.createPercentValue(100));
//        table.setMarginBottom(40);
//
//        Color headerBg = new DeviceRgb(240, 240, 240);
//        for (String header : TABLE_HEADERS) {
//            Cell headerCell = new Cell()
//                    .add(new Paragraph(header)
//                            .setFont(boldFont)
//                            .setFontSize(9)
//                            .setTextAlignment(TextAlignment.CENTER))
//                    .setBackgroundColor(headerBg)
//                    .setTextAlignment(TextAlignment.CENTER)
//                    .setVerticalAlignment(VerticalAlignment.MIDDLE)
//                    .setPadding(4)
//                    .setBorder(new SolidBorder(0.5f));
//            table.addCell(headerCell);
//        }
//
//        // 添加所有数据行
//        for (OrderDetail order : orderList) {
//            addOrderRow(table, order, normalFont, sdf);
//        }
//        document.add(table);
//
//        document.close();
//        pdfDoc.close();
//        reader.close();
//        writer.close();
//        System.out.println("PDF生成完成：" + new File(OUTPUT_PATH).getAbsolutePath());
//    }
//
//    private static void addOrderRow(Table table, OrderDetail order, PdfFont normalFont, SimpleDateFormat sdf) {
//        String[] cellData = {
//                order.getOrderNo(),
//                order.getStatus(),
//                order.getBusinessScene(),
//                order.getChannelType(),
//                order.getResourceNo(),
//                order.getDealQty() != null ? order.getDealQty().toString() : "",
//                order.getDealPrice() != null ? String.format("%.2f", order.getDealPrice()) : "",
//                order.getDealAmount() != null ? String.format("%.2f", order.getDealAmount()) : "",
//                order.getDealTime() != null ? sdf.format(order.getDealTime()) : "",
//                order.getProductName(),
//                order.getDeliveryPlace(),
//                order.getCustomerName(),
//                order.getBusinessUnit(),
//                order.getSigningParty(),
//                order.getSecondaryUnit()
//        };
//        for (String data : cellData) {
//            Cell dataCell = new Cell()
//                    .add(new Paragraph(data == null ? "" : data)
//                            .setFont(normalFont)
//                            .setFontSize(8)
//                            .setTextAlignment(TextAlignment.CENTER))
//                    .setTextAlignment(TextAlignment.CENTER)
//                    .setVerticalAlignment(VerticalAlignment.MIDDLE)
//                    .setPadding(5)
//                    .setBorder(new SolidBorder(0.5f));
//            table.addCell(dataCell);
//        }
//    }
//
//    public static void main(String[] args) throws IOException {
//        List<OrderDetail> orderList = new ArrayList<>();
//        for (int i = 1; i <= 2000; i++) {
//            orderList.add(new OrderDetail(
//                    "ORDER" + String.format("%06d", i),
//                    "计入-已确认",
//                    "化工品销售",
//                    "普通订单",
//                    "RES" + String.format("%06d", i),
//                    i % 100 + 1,
//                    8000.00 + (i % 1000),
//                    (8000.00 + (i % 1000)) * (i % 100 + 1),
//                    parseDate("2025-01-01 00:00:00"),
//                    "产品" + i,
//                    "交割地" + (i % 10),
//                    "客户" + (i % 100),
//                    "业务单位" + (i % 5),
//                    "签约甲方" + (i % 3),
//                    "二级单位" + (i % 7)
//            ));
//        }
//        generatePdf(
//                orderList,
//                "国能e商平台成交信息明细 (2025-01-01至2025-09-30)",
//                "国家能源集团宁夏煤业有限责任公司煤制油化工销售分公司"
//        );
//    }
//
//    private static Date parseDate(String dateStr) {
//        try {
//            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateStr);
//        } catch (Exception e) {
//            return new Date();
//        }
//    }
//
//    public static class OrderDetail {
//        private String orderNo;
//        private String status;
//        private String businessScene;
//        private String channelType;
//        private String resourceNo;
//        private Integer dealQty;
//        private Double dealPrice;
//        private Double dealAmount;
//        private Date dealTime;
//        private String productName;
//        private String deliveryPlace;
//        private String customerName;
//        private String businessUnit;
//        private String signingParty;
//        private String secondaryUnit;
//
//        public OrderDetail(String orderNo, String status, String businessScene, String channelType, String resourceNo,
//                           Integer dealQty, Double dealPrice, Double dealAmount, Date dealTime, String productName,
//                           String deliveryPlace, String customerName, String businessUnit, String signingParty,
//                           String secondaryUnit) {
//            this.orderNo = orderNo;
//            this.status = status;
//            this.businessScene = businessScene;
//            this.channelType = channelType;
//            this.resourceNo = resourceNo;
//            this.dealQty = dealQty;
//            this.dealPrice = dealPrice;
//            this.dealAmount = dealAmount;
//            this.dealTime = dealTime;
//            this.productName = productName;
//            this.deliveryPlace = deliveryPlace;
//            this.customerName = customerName;
//            this.businessUnit = businessUnit;
//            this.signingParty = signingParty;
//            this.secondaryUnit = secondaryUnit;
//        }
//
//        public String getOrderNo() {
//            return orderNo;
//        }
//
//        public String getStatus() {
//            return status;
//        }
//
//        public String getBusinessScene() {
//            return businessScene;
//        }
//
//        public String getChannelType() {
//            return channelType;
//        }
//
//        public String getResourceNo() {
//            return resourceNo;
//        }
//
//        public Integer getDealQty() {
//            return dealQty;
//        }
//
//        public Double getDealPrice() {
//            return dealPrice;
//        }
//
//        public Double getDealAmount() {
//            return dealAmount;
//        }
//
//        public Date getDealTime() {
//            return dealTime;
//        }
//
//        public String getProductName() {
//            return productName;
//        }
//
//        public String getDeliveryPlace() {
//            return deliveryPlace;
//        }
//
//        public String getCustomerName() {
//            return customerName;
//        }
//
//        public String getBusinessUnit() {
//            return businessUnit;
//        }
//
//        public String getSigningParty() {
//            return signingParty;
//        }
//
//        public String getSecondaryUnit() {
//            return secondaryUnit;
//        }
//    }
//}